package xianchenglock;

import java.util.concurrent.TimeUnit;

/**
 * @功能
 * @创建时间 2019/12/17
 * 业务方面加锁
 * 业务方面不加锁
 * 容易产生解锁问题（dirtyRead）
 * 由于对写有加锁，读无加锁，导致对同一数据可能有多次读取，这就是增读（这只是个例子），增读一般在多线程中出现，即上一个线程未结束，下一个线程调用了上一个线程读的数据读取
 * 对于这个例子只要在读取的时候也加上锁就好了
 */
public class Y {
    String name;
    double balance;

    public synchronized void set(String name, double balance) {
        this.name = name;
        try {
            Thread.sleep(2000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        this.balance = balance;
    }

    public /*synchronized*/ double getBalance(String name) {
        return this.balance;
    }

    public static void main(String[] args) {
        Y a = new Y();
        new Thread(() -> a.set("zhangsan", 100.0)).start();
        try {
            TimeUnit.SECONDS.sleep(1);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println(a.getBalance("zhangsan"));
        try {
            TimeUnit.SECONDS.sleep(2);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println(a.getBalance("zhangsan"));
    }
}